package com.husd.leetcode.math;

/**
 * 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性：
 *
 * 每行的元素从左到右升序排列。
 * 每列的元素从上到下升序排列。
 *
 * m == matrix.length
 * n == matrix[i].length
 * 1 <= n, m <= 300
 * -109 <= matrix[i][j] <= 109
 * 每行的所有元素从左到右升序排列
 * 每列的所有元素从上到下升序排列
 * -109 <= target <= 109
 *
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/search-a-2d-matrix-ii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author hushengdong@gome.com.cn
 * @date 2022/6/30 19:15
 */
public class SearchMatrix {

    public boolean searchMatrix(int[][] matrix, int target) {
        int rows = matrix.length;
        int columns = matrix[0].length;
        int m = 0; // 行
        int n = columns - 1; // 列
        //  核心是从右上角或者左下角开始找，这么就是一棵树
        while(m < rows && n >=0) {
            int num = matrix[m][n];
            if(num == target) {
                return true;
            }
            if(num > target) {
                n--;
            } else if (num < target) {
                m++;
            }
        }
        return false;
    }
}
